package com.example.moneybook.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.example.moneybook.dto.ResponseResult;
import com.example.moneybook.pojo.Account;

/**
 * @Author: 包
 * @Date: 2023/2/24 14:36
 * Description:
 */
public interface AccountService extends IService<Account> {

    /**
     * 添加账户
     * @param account
     * @return
     */
    ResponseResult addAccount(Account account);

    /**
     * 加载账户资源
     * @param userId
     * @return
     */
    ResponseResult loadAccount(String userId);

    /**
     * 获取用户的账户列表
     * @param userId
     * @return
     */
    ResponseResult getUserAccount(String userId);

    /**
     * 获取账户的账单（收支明细，借款，转账）
     * @param userId
     * @param accountId
     * @return
     */
    ResponseResult loadAccountBill(String userId, int accountId, int listType);

    /**
     * 获取账户id
     * @param userId
     * @param accountName
     * @return
     */
    int getAccountId(String userId, String accountName);

    /**
     * 更新账户余额
     * @param accountId
     * @param updateSate 1是支出，0是收入
     * @return
     */
    int updateAccountMoney(int accountId, int updateSate, int money);

    /**
     * 获取账户名称
     * @param userId
     * @param accountId
     * @return
     */
    String getAccountName(String userId, int accountId);

    /**
     * 获取账户余额
     * @param userId
     * @param accountId
     * @return
     */
    int getAccountMoney (String userId, int accountId);

    /**
     * 获取某个账户信息
     * @param userId
     * @param accountId
     * @return
     */
    Account getAccountInfo(String userId, int accountId);

    /**
     * 获取用户的总资产，净资产，负债，借出，借入
     * @param userId
     * @return
     */
    ResponseResult sumMoney(String userId);

    /**
     * 删除账户（删除收支相关联的信息和转账信息）
     * @param userId
     * @param accountId
     * @return
     */
    ResponseResult deleteAccount(String userId, int accountId);

    /**
     * 获取账户余额，流入，流出
     * @param userId
     * @param accountId
     * @return
     */
    ResponseResult AllInOutflow(String userId, int accountId);
}
